#ifndef ICHARACTER_HH
#define ICHARACTER_HH

#include <string>
#include "Item.hh"

// ICharacter interface, defining methods that all characters (players and enemies) must implement
class ICharacter 
{
public:
    // Virtual destructor to ensure proper memory release for derived classes
    virtual ~ICharacter() = default;

    
    // Methods that must be implemented
    virtual bool isAlive() const = 0;                        // Check if the character is alive
    virtual bool takeDamage(unsigned damage) = 0;            // Take damage
    virtual bool attack(ICharacter& target) = 0;             // Attack the target

    // Getter methods
    virtual std::string getName() const = 0;                 // Get character name
    virtual std::string getDescription() const = 0;          // Get character description
    virtual unsigned getHealth() const = 0;                  // Get current health points
    virtual unsigned getAttack() const = 0;                  // Get attack power
    virtual unsigned getDefense() const = 0;                 // Get defense power
    virtual std::string toString() const = 0;                // Convert character information to a string

    // Inventory management
    virtual void addToInventory(Item* item) = 0;             // Add item to inventory
    virtual void displayInventory() const = 0;               // Display inventory

    // Display character information
    virtual void display() const = 0;
};

#endif
